package cn.kgc.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 这个是工厂类,用反射生产对象
 * 反射:
 *    类的完全限定名
 */
public class BeanFactory {

    //1.声明Properties对象
    private static Properties properties;


    static{
        //2.创建Properties对象
        properties=new Properties();
       //3.根据配置文件bean.properties创建InputStream对象
        InputStream is=BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        //4.加载文件
        try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 读取bean.properties文件
     *  根据键获得值
     *  根据值反射生成对象
     * @return
     */
    public static Object  getBean(String keyName){
        Object bean=null;
        try {
            //根据键找值
            String absolutePath=properties.getProperty(keyName);
            //根据完全限定名反射生成对应的对象   反射
             bean=Class.forName(absolutePath).newInstance();

        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return bean;
    }

}
